package com.sizengli.learn;

import java.lang.instrument.ClassFileTransformer;
import java.lang.instrument.IllegalClassFormatException;
import java.lang.instrument.Instrumentation;
import java.lang.instrument.UnmodifiableClassException;
import java.security.ProtectionDomain;

public class Agent {

    public static void premain(String agentArgs, Instrumentation inst) {
        System.out.println("agentArgs : " + agentArgs);
        System.out.println("premain方法体内。。。");
//        Class[] allLoadedClasses = inst.getAllLoadedClasses();
//        for(Class cl : allLoadedClasses){
//            System.out.println(cl.getName());
//        }
//        inst.addTransformer(new MyTransformer());
//        inst.addTransformer(new DefineTransformer(), true);
    }

    /**
     * 以Attach的方式载入，在Java程序启动后执行
     */
    public static void agentmain(String agentArgs, Instrumentation inst) throws UnmodifiableClassException {
//        System.out.println("agentArgs : " + agentArgs);
//        System.out.println("Attach方式。。。");
        inst.addTransformer(new MyTransformer(),true);
//        System.out.println("===========================start================================");
        Class[] allLoadedClasses = inst.getAllLoadedClasses();
        for (Class cls : allLoadedClasses){
            if(cls.getName().equals("com.atguigu.boot.controller.HelloController")){
                inst.retransformClasses(cls);
            }
        }
//        System.out.println("===========================end=================================");
    }
}
